﻿Imports System.IO
Public Class Juego
    Private ListaPalabras As New List(Of Palabra)
    Private PalabrasSalidas As New List(Of Integer)
    Private Aciertos As Integer = 0
    Private Errores As Integer = 0
    Private NumeroPalabra As Integer = 0

    Public Function Añadir(ByVal Pal1 As Palabra) As String
        If Pal1 Is Nothing Then Return "La palabra debe existir"
        If Pal1.Enunciado = "" Or Pal1.Descripcion = "" Then Return "Faltan datos"
        'Const letras = "abcdefghijklmnñopqrstuvwxyz" & ControlChars.Back

        ' Contains funciona porque hemos implementado Equals en palabra
        If ListaPalabras.Contains(Pal1) Then Return "Ya existe la palabra " & Pal1.Enunciado
        ListaPalabras.Add(Pal1)
        Return ""
    End Function
    Public Sub Borrar(ByVal enunciado As String)
        For i As Integer = 0 To ListaPalabras.Count - 1
            If ListaPalabras(i).Enunciado = enunciado Then ListaPalabras.Remove(ListaPalabras(i))
        Next

    End Sub

    Public Sub BorrarTodas()
        ListaPalabras.Clear()
    End Sub

    Public Function PalabraAlAzar() As Palabra
        If Not PalabrasSalidas.Count = ListaPalabras.Count Then
            Dim num As Integer
            Do
                Dim rnd As New Random()
                num = rnd.Next(ListaPalabras.Count)
            Loop Until Not PalabrasSalidas.Contains(num)

            PalabrasSalidas.Add(num)
            NumeroPalabra = num
            Return ListaPalabras(num)


        End If
        Return Nothing

    End Function

    Public Function Contador(ByVal palabra As Char) As String
        For i As Integer = 0 To ListaPalabras.Count - 1
            If ListaPalabras(i).Enunciado.Contains(palabra) Then

                Aciertos += 1
                Return ""
            Else
                Errores += 1
                Return ""
            End If

        Next
        Return ""
    End Function
    Public Function PosicionesLetra(ByVal letra As Char) As List(Of Integer)
        Dim ListaLetras As New List(Of Integer)

        If ListaPalabras(NumeroPalabra).Enunciado.Contains(letra) Then
            For i As Integer = 0 To ListaPalabras(NumeroPalabra).Enunciado.Length - 1
                If ListaPalabras(NumeroPalabra).Enunciado.ElementAt(i) = letra Then
                    ListaLetras.Add(i)
                End If
            Next
            Aciertos = Aciertos + ListaLetras.Count
            Return ListaLetras

        End If

        Errores += 1
        Return Nothing


    End Function
    Public ReadOnly Property Ahorcado As String
        Get
            If Errores = 5 Then Return "Has perdido"
            Return Nothing
        End Get
    End Property
    Public ReadOnly Property Adivinado As String
        Get
            If Aciertos = ListaPalabras(NumeroPalabra).Enunciado.Length Then Return "Palabra acertada!!!"
            Return Nothing
        End Get
    End Property
    Public Sub Reiniciar()
        PalabrasSalidas.Clear()
        Aciertos = 0
        Errores = 0
    End Sub
    Public Sub New()
        'ListaPalabras.Add(New Palabra("coche", "vehículo de cinco ruedas"))
        'ListaPalabras.Add(New Palabra("pocheta", "la manga del mar menor"))
        'ListaPalabras.Add(New Palabra("yeska", "abundante en jamaica"))
        'ListaPalabras.Add(New Palabra("parguela", "pardillo en barriobajero"))
        'ListaPalabras.Add(New Palabra("samu", "jugon "))
        'ListaPalabras.Add(New Palabra("luismi", "mago de nivel internacional"))
        'ListaPalabras.Add(New Palabra("silla", "para sentarse"))
        'ListaPalabras.Add(New Palabra("bajera", "'biblioteca' para los padres de todos los jovenes de navarra"))
        'ListaPalabras.Add(New Palabra("peugeot", "marca francesa de coches"))
        'ListaPalabras.Add(New Palabra("pintxito", "amador rivas esta loco por echar uno"))
        'Dim fich As System.IO.StreamReader
        Dim fich As StreamReader

        If File.Exists("lista.txt") Then
            fich = New StreamReader("lista.txt")

            Try

                Do Until fich.EndOfStream
                    Dim datos() As String
                    Dim linea As String

                    linea = fich.ReadLine
                    datos = linea.Split("*")

                    ListaPalabras.Add(New Palabra(datos(0), datos(1)))
                Loop

            Catch ex As Exception
                ListaPalabras.Clear()
            Finally
                fich.Close()
            End Try


        End If
    End Sub
    Public Function DevuelveLista() As List(Of Clases.Palabra)
        Return ListaPalabras

    End Function
End Class
